﻿Option Strict On
Option Explicit On 

Imports IP.Core.IPUserService

''' -----------------------------------------------------------------------------
''' Project	 : IPDataControl
''' Interface	 : Core.IPDataControl.I_InplaceEditGridContainer
''' 
''' -----------------------------------------------------------------------------
''' <summary>
''' Đây là interface cần implement để support inplace editing
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
''' 	[csung]	2/26/2005	Created
''' </history>
''' -----------------------------------------------------------------------------
Public Interface I_InplaceEditGridContainer
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' lấy đối tượng cần delete. bao gồm các thông tin đối tượng us, datarow, state, và có thể cả delete row index
    ''' </summary>
    ''' <param name="i_grid_row_index"></param>
    ''' <returns>đối tượng cần delete</returns>
    ''' <remarks>
    ''' <example>
    ''' <code lang="Visual Basic">
    ''' Public Function get_deleted_row_object(ByVal i_grid_row_index As Integer) As InplaceEditedRowObject Implements I_InplaceEditGridContainer.get_deleted_row_object
    '''    Dim v_us As New US_HT_PHAN_QUYEN_HE_THONG
    '''    Dim v_data_row As DataRow = CType(m_fg.Rows(i_grid_row_index).UserData, DataRow)
    '''    v_us.DataRow2Me(v_data_row)
    '''    Return New InplaceEditedRowObject(v_us, v_data_row, InPlaceEditRowState.Deleted)
    ''' End Function
    ''' </code>
    ''' </example>
    ''' </remarks>
    ''' <history>
    ''' 	[csung]	2/26/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Function get_deleted_row_object(ByVal i_grid_row_index As Integer) As InplaceEditedRowObject
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' lấy đối tượng IED row cần update
    ''' </summary>
    ''' <param name="i_grid_row_index"></param>
    ''' <returns></returns>
    ''' <example>
    ''' <code lang="Visual Basic">
    ''' Public Function get_updated_row_Object(ByVal i_grid_row_index As Integer) As InplaceEditedRowObject Implements I_InplaceEditGridContainer.get_updated_row_object
    ''' 'GET US OBJECT AND DATAROW
    '''    Dim v_us As New US_HT_PHAN_QUYEN_HE_THONG
    '''    Dim v_data_row As DataRow = CType(m_fg.Rows(i_grid_row_index).UserData, DataRow)
    '''    v_us.DataRow2Me(v_data_row)
    ''' 'SET THE DATA HAVE BEEN EDITED IN THE ROW
    '''    v_us.strGHI_CHU = Convert.ToString(m_fg(i_grid_row_index, ColNumber.Col_Ghi_Chu))
    '''    v_us.strMA_PHAN_QUYEN = Convert.ToString(m_fg(i_grid_row_index, ColNumber.Col_Ma_phan_quyen))
    '''    v_us.strLOAI_PHAN_QUYEN = Convert.ToString(m_fg(i_grid_row_index, ColNumber.Col_Loai_phan_quyen))
    ''' 'MAKE OBJECT EDITED
    '''    Return New InplaceEditedRowObject(v_us, v_data_row, InPlaceEditRowState.Updated)
    ''' End Function
    ''' </code>
    ''' </example>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' 	[csung]	2/26/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Function get_updated_row_object(ByVal i_grid_row_index As Integer) As InplaceEditedRowObject
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' lấy đối tượg IED cần cập nhật
    ''' </summary>
    ''' <param name="i_grid_row_index"></param>
    ''' <returns></returns>
    ''' <example>
    ''' <code lang="Visual Basic">
    ''' Public Function get_new_row_object(ByVal i_grid_row_index As Integer) As InplaceEditedRowObject Implements I_InplaceEditGridContainer.get_new_row_object
    '''    Dim v_us As New US_HT_PHAN_QUYEN_HE_THONG
    '''    v_us.strGHI_CHU = Convert.ToString(m_fg(i_grid_row_index, ColNumber.Col_Ghi_Chu))
    '''    v_us.strMA_PHAN_QUYEN = Convert.ToString(m_fg(i_grid_row_index, ColNumber.Col_Ma_phan_quyen))
    '''    v_us.strLOAI_PHAN_QUYEN = Convert.ToString(m_fg(i_grid_row_index, ColNumber.Col_Loai_phan_quyen))
    '''    Return New InplaceEditedRowObject(v_us, Nothing, InPlaceEditRowState.NewRow)
    ''' End Function
    ''' </code>
    ''' </example>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' 	[csung]	2/26/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Function get_new_row_object(ByVal i_grid_row_index As Integer) As InplaceEditedRowObject
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Một hàng có rỗng hay không theo ý hiểu của client
    ''' </summary>
    ''' <param name="i_grid_row_index">index của hàng</param>
    ''' <example>
    ''' <code lang="Visual Basic">
    ''' Function is_empty_row(ByVal i_grid_row_index As Integer) As Boolean Implements I_InplaceEditGridContainer.is_empty_row
    '''    Return Convert.ToString(m_fg(i_grid_row_index, ColNumber.Col_Ma_phan_quyen)) = "" And _
    '''           Convert.ToString(m_fg(i_grid_row_index, ColNumber.Col_Loai_phan_quyen)) = "" And _
    '''           Convert.ToString(m_fg(i_grid_row_index, ColNumber.Col_Ghi_Chu)) = ""
    ''' End Function
    ''' </code>
    ''' </example>
    ''' <returns></returns>
    ''' <remarks>
    ''' <list type="bullet">
    ''' <item>
    ''' Tôi không biết thế nào là một hàng rỗng, cái đó bạn phải tự quyết định. Ví dụ như trong một
    ''' grid có một cột số thứ tự và các cột khác. Trên cột số thứ tự có dữ liệu, nhưng trên các cột khác
    ''' không có (kiểu excel) thì đối với bạn là hàng rỗng hay hàng có dữ liệu
    ''' </item>
    ''' <item>
    ''' Nếu không có gì đặc biệt, thông thường tôi dùng <c> CGridUtils.are_there_any_visible_data_in_row() </c> cũng OK (trừ trường hợp trên)
    ''' <code language="Visual Basic">
    ''' Function is_empty_row(ByVal i_grid_row_index As Integer) As Boolean _
    '''                                Implements I_InplaceEditGridContainer.is_empty_row
    '''    Return CGridUtils.are_there_no_visible_data_in_row(i_grid_row_index, m_fg)
    ''' End Function
    ''' </code>
    ''' </item>
    ''' <item>
    ''' Phải để ý các grid null
    ''' </item>
    ''' </list>
    ''' </remarks>
    ''' <history>
    ''' 	[csung]	2/26/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Function is_empty_row(ByVal i_grid_row_index As Integer) As Boolean
End Interface

''' -----------------------------------------------------------------------------
''' Project	 : IPDataControl
''' Class	 : Core.IPDataControl.InplaceEditedRowObject
''' 
''' -----------------------------------------------------------------------------
''' <summary>
''' Đối tượng row bị edit. Gồm có us object, data row cũ  từ dataset, row state và có thể có 
''' cả index của row trên grid
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
''' 	[csung]	2/26/2005	Created
''' </history>
''' -----------------------------------------------------------------------------
Public Class InplaceEditedRowObject

    Private m_edited_us_object As US_Object
    Private m_original_data_row As DataRow
    Private m_row_state As InPlaceEditRowState
    ' DELETE => old position in grid before deleting
    ' NEW => position in grid , 
    ' UPDATE => position in in grid 
    Private m_row_index As Integer = -1


    Public Sub New(ByVal i_us_object As US_Object, ByVal i_row As DataRow, ByVal i_row_state As InPlaceEditRowState)
        m_edited_us_object = i_us_object
        m_original_data_row = i_row
        m_row_state = i_row_state
    End Sub

    Public Sub New(ByVal i_us_object As US_Object, _
                    ByVal i_row As DataRow, _
                    ByVal i_row_state As InPlaceEditRowState, _
                    ByVal i_row_Index As Integer)
        m_edited_us_object = i_us_object
        m_original_data_row = i_row
        m_row_state = i_row_state
        m_row_index = i_row_Index
    End Sub
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' đối tượng US object cần xử lý (insert hoặc delete hoặc update)
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' 	[csung]	2/26/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Property edited_us_object() As US_Object
        Get
            Return m_edited_us_object
        End Get
        Set(ByVal Value As US_Object)
            m_edited_us_object = Value
        End Set
    End Property

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    '''  datarow cũ khi đổ từ dataset ra
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' 	[csung]	2/26/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Property original_data_row() As DataRow
        Get
            Return m_original_data_row
        End Get
        Set(ByVal Value As DataRow)
            m_original_data_row = Value
        End Set
    End Property
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Trạng thái của hàng
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' 	[csung]	2/26/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Property row_state() As InPlaceEditRowState
        Get
            Return m_row_state
        End Get
        Set(ByVal Value As InPlaceEditRowState)
            m_row_state = Value
        End Set
    End Property
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' đây là hàng trên grid. Nhưng chỉ đúng với trường hợp update và insert
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' <list type="bullet">
    ''' <item>
    ''' insert => index của hàng hiện tại trên grid
    ''' </item>
    ''' <item>
    ''' update => index của hàng hiện tại trên grid
    ''' </item>
    ''' <item>
    ''' delete => index của hàng lúc trước khi delete trên grid (từ đó đến hiện tại  đã có nhiều
    ''' thay đổi và ở vị trí này là một đối tượng khác)
    ''' </item>
    ''' </list>
    ''' </remarks>
    ''' <history>
    ''' 	[csung]	2/26/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Property row_index() As Integer
        Get
            Return m_row_index
        End Get
        Set(ByVal Value As Integer)
            m_row_index = Value
        End Set
    End Property

    Public Function get_original_ID() As Decimal
        Debug.Assert(m_row_state <> InPlaceEditRowState.NewRow, "CSUNG - get_original_ID- New Row khong co ID")
        Return System.Convert.ToDecimal(m_original_data_row("ID"))
    End Function

End Class

''' -----------------------------------------------------------------------------
''' Project	 : IPDataControl
''' Class	 : Core.IPDataControl.InplaceEditedRowObjectCollection
''' 
''' -----------------------------------------------------------------------------
''' <summary>
''' Collection của các đối tượng IED row cần xử lý
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
''' 	[csung]	2/26/2005	Created
''' </history>
''' -----------------------------------------------------------------------------
Public Class InplaceEditedRowObjectCollection
    Inherits CollectionBase
    ' Nhiệm vụ: sử dụng Strongly Typed Collection của các đối tượng hàng edited
    '
    '
    Default Public Property Item(ByVal Index As Integer) As InplaceEditedRowObject
        Get
            Return CType(List.Item(Index), InplaceEditedRowObject)
        End Get
        Set(ByVal Value As InplaceEditedRowObject)
            List.Item(Index) = Value
        End Set
    End Property

    Public Function Add(ByVal Item As InplaceEditedRowObject) As Integer
        Return List.Add(Item)
    End Function

End Class
